package org.example.xx2.service;

import org.example.xx2.dto.*;
import org.example.xx2.model.User;

import java.util.List;

public interface UserService {

    // 用户登录
    ApiResponse<LoginResponse> login(LoginRequest request);

    // 用户注册
    ApiResponse<String> register(RegisterRequest request);
    
    // 忘记密码 - 获取安全问题
    ApiResponse<String> getSecurityQuestion(String account);
    
    // 忘记密码 - 验证安全问题答案
    ApiResponse<String> verifySecurityAnswer(ForgotPasswordRequest request);
    
    // 忘记密码 - 发送手机验证码
    ApiResponse<String> sendPhoneVerificationCode(String phone);
    
    // 忘记密码 - 发送邮箱验证码
    ApiResponse<String> sendEmailVerificationCode(String email);
    
    // 忘记密码 - 验证验证码并重置密码
    ApiResponse<String> resetPasswordByCode(ForgotPasswordRequest request);
    
    // 修改密码
    ApiResponse<String> changePassword(Integer userId, ChangePasswordRequest request);
    
    // 获取用户信息
    ApiResponse<User> getUserInfo(Integer userId);
    
    // 更新用户信息
//    ApiResponse<String> updateUserInfo(Integer userId, User user);
    ApiResponse<String> updateUserInfo(Integer userId, User user);

    // 管理员功能 - 获取所有用户
    ApiResponse<List<User>> getAllUsers();
    
    // 管理员功能 - 分页获取用户
    ApiResponse<List<User>> getUsersByPage(int page, int size);
    
    // 管理员功能 - 更新用户信息
    ApiResponse<String> updateUserByAdmin(Integer userId, User user);
    
    // 管理员功能 - 删除用户
    ApiResponse<String> deleteUser(Integer userId);
    
    // 检查用户名是否存在
    boolean isUsernameExists(String account);
    
    // 检查手机号是否存在
    boolean isPhoneExists(String phone);
    
    // 检查邮箱是否存在
    boolean isEmailExists(String email);

    // 基础CRUD方法（兼容性）
    int update(User user);
    User selectById(Integer id);
    User findUserById(Integer id);
    User findUserById(String account);

}
